package bots;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.StringFilter;
import org.htmlparser.tags.OptionTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.restlet.resource.ClientResource;

import restlet.interfaces.TripCatsResourceI;
import beans.BeneffitBean;
import beans.CarrierBean;
import beans.MestoBean;
import beans.TripCatBean;
import beans.TripPartBean;


public class GSPNS implements BotI{

	//PILE - test da vidim da li ce da snimi podatke na SVN, posto mi nije trazio username i sifru za checkout....mozda je u read-only
	@Override
	public List<TripPartBean> procitajPodatke() {
		
		//prvo ucitavamo vrstu prevoza
		ClientResource cr = new ClientResource("http://localhost:8888/rest/tripCats");
		TripCatsResourceI tripCatResource = cr.wrap(TripCatsResourceI.class);
		
		TripCatBean tcVrstaPrevoza = null;
		for(TripCatBean tc : tripCatResource.allTripCats()){
			if (tc.getNaziv().equalsIgnoreCase("Bus")) {
				tcVrstaPrevoza = tc;
				break;
			}
		}
		 
		System.out.println("Ucitana vrsta prevoza: " + tcVrstaPrevoza);
		List<TripPartBean> rezultat = new ArrayList<TripPartBean>();
		
		SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat sdfTime = new SimpleDateFormat("hh:mm");

		try {
			
			//UCITAVAMO POLASKE IZ NOVOG SADA

			System.out.println("\n\tUcitavamo pocetnu stranicu...");
			Parser parser = new Parser("http://gspns.rs/redvoznje.php?rv=rvm");
			System.out.println("\n\tStranica ucitana!");
			//parsiramo stranicu
			NodeList nl = parser.parse(new HasAttributeFilter("name", "linija[]"));
			Tag tag = (Tag) nl.elementAt(0);

			//izvlacimo gradove iz stranice
			SelectTag slGradovi = (SelectTag) tag;			
			//System.out.println("Ukupno gradova: "+slGradovi.getChildCount());			
			OptionTag otGradovi[] = slGradovi.getOptionTags();
			
			for (int i = 0; i < otGradovi.length; i++) {
				String grad = otGradovi[i].getValue();

				//vadimo danasnji datum
				String currentDate = sdfDate.format(Calendar.getInstance().getTime());

				//ucitavamo stranizu za polaske
				System.out.println("\n\tUcitavamo stranicu za grad: " + grad + "...");
								
				parser = new Parser("http://gspns.rs/redvoznje.php?zadan="+currentDate+"&pd=p&rv=rvm&linija%5B%5D=" + grad);
				System.out.println("\n\tStranica ucitana!");

				//pronalazimo tabalu preko vrednosti, posto nema NAME
				nl = parser.parse(new StringFilter("Polasci za "));
				tag = (Tag) nl.elementAt(0).getParent();

				//pozivamo 2 puta, da bi smo dosli do tabele
				tag = (Tag) tag.getParent();
				TableTag ttTabela = (TableTag) tag.getParent();

				//prolazimo kroz redove pocevsi od drugog, jer oni sadrze podatke
				for (int j = 2; j < ttTabela.getRowCount(); j++) {
					TableRow trRed = ttTabela.getRow(j);
					//ttTabela.get
					TableColumn[] tcKolone = trRed.getColumns();

					String vremePolaska = tcKolone[0].getChild(0).toPlainTextString(); 
					//String kilometraza = tcKolone[1].getChild(0).toPlainTextString(); ;
					String trajanje = tcKolone[2].getChild(0).toPlainTextString(); ;
					String prevoznik = tcKolone[3].getChild(0).toPlainTextString(); ;
					//String linija = tcKolone[4].getChild(0).toPlainTextString(); ;
					//String peron = tcKolone[5].getChild(0).toPlainTextString(); ;
					String cena = tcKolone[6].getChild(0).toPlainTextString(); ;
					CarrierBean cPrev = new CarrierBean(prevoznik);
					cPrev.setVrstaPrevoza(tcVrstaPrevoza);
					
						MestoBean mMestoOd = new MestoBean("NOVI SAD");
						MestoBean mMestoDo = new MestoBean(grad);
					
						TripPartBean tp = new TripPartBean(Integer.valueOf(0),Double.parseDouble(cena),
								sdfTime.parse(vremePolaska), sdfTime.parse(trajanje), new ArrayList<BeneffitBean>(),
								mMestoOd, mMestoDo, cPrev);
											
						rezultat.add(tp);
						System.out.println(tp);

				}
			}
			
			//UCITANI POLASCI IZ NOVOG SADA

			//**********************************
			
			//UCITAVAMO DOLASKE IZ NOVOG SADA


		} catch (ParserException e) {
			e.printStackTrace();
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return rezultat;
	}
}
